﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

using Ext.Net;
using BO = Viewer.BusinessObject.BusinessEntities;
using Viewer.BusinessObject.BusinessEntities;
using System.Collections.Generic;
namespace Viewer.NguoiDung.UserControls
{
    public partial class Detail : System.Web.UI.UserControl
    {
        QUNhomQuyenByToChuc_NguoiDung tochuc_nguoidung = new QUNhomQuyenByToChuc_NguoiDung();
        QUNhomQuyenByModule_NguoiDung module_nguoidung = new QUNhomQuyenByModule_NguoiDung();
        QUNhomNguoiDung_NguoiDung nhomNguoiDung = new QUNhomNguoiDung_NguoiDung();
        BO.QUNguoiDung item = new Viewer.BusinessObject.BusinessEntities.QUNguoiDung();
        private enum DialogType
        {
            AddNew,
            Edit,
            Detail
        }

        protected void Page_Load(object sender, EventArgs e)
        {

        }
        public void Ex()
        {
            wdDetail.Show();
        }
        private void ResetData()
        {
            txtPass.Text = string.Empty;
            txtConfirmPass.Text = string.Empty;
            txtId.Text = string.Empty;
            txtFullName.Text = string.Empty;
            storeModule_NhomQuyen.RemoveAll();
            storeModule_NhomQuyen.DataBind();
            storeNhomquyen.RemoveAll();
            storeNhomquyen.DataBind();
            storeNhomNguoiDung.RemoveAll();
            storeNhomNguoiDung.DataBind();
        }
        [DirectMethod]
        public void ShowDialog(int UserId, string type)
        {
            hdDialogType.Value = type;
            TabPanel1.SetActiveTab(Panel1);


            if (type.Equals(DialogType.Detail.ToString()))
            {
                txtFullName.ReadOnly = true;
                txtPass.ReadOnly = true;
                txtConfirmPass.ReadOnly = true;
                btnSave.Hidden = true;
                wdDetail.Title = "Chi tiết người dùng";
                btnSave.Hidden = true;
               
                LoadDataForUser(UserId);
            }
            else if (type.Equals(DialogType.Edit.ToString()))
            {
                txtFullName.ReadOnly = false;
                txtPass.ReadOnly = false;
                txtConfirmPass.ReadOnly = false;
                btnSave.Hidden = false;
                wdDetail.Title = "Sửa đổi người dùng";
                btnSave.Hidden = false;
               
                LoadDataForUser(UserId);
            }
            else if (type.Equals(DialogType.AddNew.ToString()))
            {
                hdFullName.Value = string.Empty;
                txtFullName.ReadOnly = false;
                txtPass.ReadOnly = false;
                txtConfirmPass.ReadOnly = false;
                btnSave.Hidden = false;
                wdDetail.Title = "Thêm mới người dùng";
                btnSave.Hidden = false;
               
                ResetData();
            }

            wdDetail.Show();
        }

        public bool CheckExistUser(string name)
        {
            if (item.CheckUserExist(name))
            {
                return true;
            }
            return false;

        }
        [DirectMethod]
        public void CheckTonTai(string name)
        {

            if (hdDialogType.Value.ToString().Equals(DialogType.AddNew.ToString()) && CheckExistUser(txtFullName.Text)
                || (!hdFullName.Value.ToString().Trim().Equals(txtFullName.Text.Trim()) && hdDialogType.Value.ToString().Equals(DialogType.Edit.ToString()) && CheckExistUser(txtFullName.Text)))
            {
                X.Msg.Alert("Thông báo", "Tên đăng nhập " + name + " đã tồn tại!").Show();
                txtFullName.Focus();
            }
            else
            {
                X.Msg.Alert("Thông báo", "Bạn có thể sử dụng tên đăng nhập này!").Show();

            }
            X.Mask.Hide();
        }
        private void LoadDataForUser(int id)
        {
            BO.QUNguoiDung queryUser = item.LoadDataById(id);
            txtId.Text = queryUser.NguoiDungID.ToString();
            txtFullName.Text = queryUser.TenDangNhap;
            hdFullName.Value = queryUser.TenDangNhap;
            txtPass.Text = queryUser.MatKhau;
            txtConfirmPass.Text = queryUser.MatKhau;

            BO.QUNhomQuyenByToChuc query = new Viewer.BusinessObject.BusinessEntities.QUNhomQuyenByToChuc();
            storeNhomquyen.DataSource = query.LoadDataByIdUser(id);
            storeNhomquyen.DataBind();

            BO.QUNhomQuyenByModule query1 = new Viewer.BusinessObject.BusinessEntities.QUNhomQuyenByModule();
            storeModule_NhomQuyen.DataSource = query1.LoadDataModuleByIdUser(id);
            storeModule_NhomQuyen.DataBind();

            storeNhomNguoiDung.DataSource = nhomNguoiDung.GetNhomNguoiDungByNguoiDungID(id);
            storeNhomNguoiDung.DataBind();
        }

        protected void btnSave_Click(object sender, DirectEventArgs e)
        {
            //Code này tạm thời. 
            if (hdDialogType.Value.ToString().Equals(DialogType.AddNew.ToString()) && CheckExistUser(txtFullName.Text)
                || (!hdFullName.Value.ToString().Trim().Equals(txtFullName.Text.Trim()) && hdDialogType.Value.ToString().Equals(DialogType.Edit.ToString()) && CheckExistUser(txtFullName.Text)))
            {
                X.Msg.Alert("Thông báo", "Tên đăng nhập " + txtFullName.Text + " đã tồn tại!").Show();

            }
            else
            {

                int userId = 0;
                //Lấy dữ liệu của tổ chức và module
                string[] separator = new string[] { "," };
                var ToChucIds = this.__ToChucIds.Text.Split(separator, StringSplitOptions.RemoveEmptyEntries);
                var ModuleIds = this.__ModuleIds.Text.Split(separator, StringSplitOptions.RemoveEmptyEntries);
                var NhomNguoiDungIds = this.__NhomNguoiDungIds.Text.Split(separator, StringSplitOptions.RemoveEmptyEntries);
                //xử lí add new và edit
                if (hdDialogType.Value.ToString().Equals(DialogType.Edit.ToString()))
                {
                    item.UpdateNguoiDung(Convert.ToInt16(txtId.Text), txtFullName.Text, txtPass.Text);
                    userId = Convert.ToInt16(txtId.Text);
                }
                else
                {
                    userId = item.InsertNguoiDung(txtFullName.Text, txtPass.Text);
                }

                List<QUNhomQuyenByToChuc_NguoiDung> lstItemToChuc_NguoiDung = new List<QUNhomQuyenByToChuc_NguoiDung>();
                List<QUNhomQuyenByModule_NguoiDung> lstItemModule_NguoiDung = new List<QUNhomQuyenByModule_NguoiDung>();
                List<QUNhomNguoiDung_NguoiDung> lstItemNhomNguoiDung_NguoiDung = new List<QUNhomNguoiDung_NguoiDung>();
                //add record tochuc vao lstItemToChuc_NguoiDung
                foreach (var strId in ToChucIds)
                {
                    var oNhomQuyenByToChuc_NguoiDung = new BusinessObject.BusinessEntities.QUNhomQuyenByToChuc_NguoiDung();
                    oNhomQuyenByToChuc_NguoiDung.NguoiDungID = userId;
                    oNhomQuyenByToChuc_NguoiDung.NhomQuyenByToChucID = Convert.ToInt32(strId);
                    lstItemToChuc_NguoiDung.Add(oNhomQuyenByToChuc_NguoiDung);
                }
                //add record module vao lstItemModule_NguoiDung
                foreach (var strId in ModuleIds)
                {
                    var oNhomQuyenByModule_NguoiDung = new BusinessObject.BusinessEntities.QUNhomQuyenByModule_NguoiDung();
                    oNhomQuyenByModule_NguoiDung.NguoiDungID = userId;
                    oNhomQuyenByModule_NguoiDung.NhomQuyenByModuleID = Convert.ToInt32(strId);
                    lstItemModule_NguoiDung.Add(oNhomQuyenByModule_NguoiDung);
                }
                foreach (var strId in NhomNguoiDungIds)
                {
                    var oNhomQuyenByNhomNguoiDung_NguoiDung = new BusinessObject.BusinessEntities.QUNhomNguoiDung_NguoiDung();
                    oNhomQuyenByNhomNguoiDung_NguoiDung.NguoiDungID = userId;
                    oNhomQuyenByNhomNguoiDung_NguoiDung.NhomNguoiDungID = Convert.ToInt32(strId);
                    lstItemNhomNguoiDung_NguoiDung.Add(oNhomQuyenByNhomNguoiDung_NguoiDung);
                }
                //xử lí add tổ chức
                tochuc_nguoidung.SaveDataList(userId, lstItemToChuc_NguoiDung);
                //xử lí cho module
                module_nguoidung.SaveDataList(userId, lstItemModule_NguoiDung);
                //xử lí nhóm người dùng
                nhomNguoiDung.SaveDataList(userId, lstItemNhomNguoiDung_NguoiDung);
                ((NguoiDung)this.Page).LoadData();
                wdDetail.Hide();
            }
            X.Mask.Hide();
        }
        [DirectMethod]
        public void ShowDialogUC(string type)
        {
            if (type.Equals("ToChuc"))
            {
                UCThemToChuc.ShowDialogThemToChuc();
            }
            else if (type.Equals("ChucNang"))
            {
                UCThemModule.ShowDialog();
            }
            else
            {
                UCThemNhomNguoiDung.ShowDialog();
            }

        }


    }
}